package com.easyweb.session;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;

import javax.ejb.Remove;
import javax.faces.component.html.HtmlSelectOneMenu;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.persistence.EntityManager;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Destroy;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import javax.faces.context.ExternalContext;

import com.easyweb.classs.LokasyonBilgileri;
import com.easyweb.entity.Bayi;
import com.easyweb.entity.BayiGps;
import com.easyweb.entity.Ilce;
import com.easyweb.entity.Iller;
import com.easyweb.entity.Semtler;
import com.easyweb.tools.GenelTools;

@Name("haritaGoruntuleme")
@Scope(ScopeType.CONVERSATION)
public class HaritaGoruntuleme {
	@In(required = false)
	FacesContext facesContext;
	@In
	EntityManager entityManager;
	private int zoom;
	private String gmapkey;
	private Iller iller;
	private Ilce ilce;
	private Semtler semt;
	private List<Ilce> ilcelerList = new ArrayList<Ilce>();
	private List<Semtler> semtlerList = new ArrayList<Semtler>();
	private List<LokasyonBilgileri> lokasyonBilgileriList = null;

	private String defaultLokasyon;
	private int defaultZoom;
	private String urlAdi;

	public void init() {
		HttpServletRequest request = (HttpServletRequest) facesContext
				.getExternalContext().getRequest();
		String url = request.getRequestURL().toString();
		urlAdi = url.substring(0, url.lastIndexOf("/")) + "/img/";
		// defaultLokasyonSet();
		geciciLokasyonSet();
	}

	public void geciciLokasyonSet() {
		lokasyonBilgileriList = new ArrayList<LokasyonBilgileri>();
		defaultLokasyon = "Istanbul";
		defaultZoom = 10;
		
		List<BayiGps> bayiGpsList = new ArrayList<BayiGps>();
		bayiGpsList = entityManager.createQuery("select b from BayiGps b ")
				.getResultList();
		for (BayiGps bayiGps : bayiGpsList) {
		
			String urlAdiYeni="";
			if (bayiGps.getBayi().getBayiTipiEski()=="TTBAYİ"){
				urlAdiYeni=urlAdi+"tt.jpg";
			}
			else
			{
				urlAdiYeni=urlAdi+"co.jpg";
			}
	 		String htmlBilgisi = "<center>" + bayiGps.getBayi().getUnvan() + "<br>" 
			+bayiGps.getBayi().getAdresEski() +"<br>" + "<img src="+urlAdiYeni+"></center>";
	 		LokasyonBilgileri lB = new LokasyonBilgileri("",htmlBilgisi , bayiGps.getLatitude(), bayiGps
					.getLongitude());
			lokasyonBilgileriList.add(lB);
 		}
	}

	public void doHarita() {
		defaultLokasyonSet();
		bayiDoldur();
	}

	public void defaultLokasyonSet() {
 		if (iller != null && iller.getId() instanceof Long) {
			lokasyonBilgileriList = null;
			GenelTools genelTools = new GenelTools();
			/* sadece il girildi ise */
			if (ilce == null) {
				defaultLokasyon = genelTools.stringTurkcelestir(iller
						.getIlAdi())
						+ ", " + "TURKEY";
				defaultZoom = 10;
			} else {
				/* ilçe girildi, semt girilmedi */
				if (semt == null) {
					defaultLokasyon = genelTools.stringTurkcelestir(ilce
							.getIlceAdi())
							+ ", "
							+ genelTools.stringTurkcelestir(iller.getIlAdi())
							+ ", " + "TURKEY";
					defaultZoom = 14;
				} else {
					if (!(semt.getSemtAdi().toLowerCase().contains("merkez"))) {
						defaultLokasyon = genelTools.stringTurkcelestir(semt
								.getSemtAdi())
								+ ", "
								+ genelTools.stringTurkcelestir(ilce
										.getIlceAdi())
								+ ", "
								+ genelTools.stringTurkcelestir(iller
										.getIlAdi()) + ", " + "TURKEY";
						defaultZoom = 16;
					}
				}
			}
 		} else {
			defaultLokasyon = "TURKEY";
			defaultZoom = 6;
		}
	}

	public void bayiDoldur() {
		GenelTools genelTools = new GenelTools();

		List<Bayi> bayiGeciciList = new ArrayList<Bayi>();
		lokasyonBilgileriList = new ArrayList<LokasyonBilgileri>();

		if (iller != null && ilce == null)
			bayiGeciciList = entityManager.createNamedQuery(
					"bayilerTumKayitlarIleGore").setParameter("p1",
					iller.getId()).getResultList();
		if (iller != null && ilce != null && semt == null)
			bayiGeciciList = entityManager.createNamedQuery(
					"bayilerTumKayitlarIlceyeGore").setParameter("p1",
					ilce.getIlceAdi()).getResultList();

		if (iller != null && ilce != null && semt != null)
			bayiGeciciList = entityManager.createNamedQuery(
					"bayilerTumKayitlarSemteGore").setParameter("p1",
					semt.getSemtAdi()).getResultList();
		for (Bayi bayi : bayiGeciciList) {
			String adresBilgisi = "";
			if (bayi.getCadde() != null && bayi.getCadde() instanceof String) {
				adresBilgisi = genelTools.stringTurkcelestir(bayi.getCadde())
						+ ", ";
			}
			if (bayi.getSemtAdiEski() != null
					&& bayi.getSemtAdiEski().length() > 0) {
				adresBilgisi = adresBilgisi
						+ genelTools.stringTurkcelestir(bayi.getSemtAdiEski())
						+ ", ";
			}
			if (bayi.getIlceEskiAdi() != null
					&& bayi.getIlceEskiAdi().length() > 0) {
				adresBilgisi = adresBilgisi
						+ genelTools.stringTurkcelestir(bayi.getIlceEskiAdi())
						+ ", ";
			}
			adresBilgisi = adresBilgisi
					+ genelTools.stringTurkcelestir(bayi.getIl().getIlAdi())
					+ ", " + "TURKEY";

			LokasyonBilgileri lB = new LokasyonBilgileri(adresBilgisi,
					adresBilgisi, "", "");
			System.out.println("-----------------------" + adresBilgisi);
			lokasyonBilgileriList.add(lB);
		}
 	}

	public void illerDoldur() {
		List<Iller> illerGeciciList = new ArrayList<Iller>();
		illerGeciciList = entityManager.createNamedQuery("illerTumKayitlar")
				.getResultList();
		lokasyonBilgileriList = new ArrayList<LokasyonBilgileri>();
		GenelTools genelTools = new GenelTools();

		for (Iller iller : illerGeciciList) {
			// String adresBilgisi = iller.getIlAdi().toUpperCase();
			String adresBilgisi = iller.getIlAdi();
			// adresBilgisi = adresBilgisi.replaceAll("Ç", "C");
			// adresBilgisi = adresBilgisi.replaceAll("Ş", "S");
			// adresBilgisi = adresBilgisi.replaceAll("ğ", "g");
			// adresBilgisi = adresBilgisi.replaceAll("i", "i");
			// adresBilgisi = adresBilgisi.replaceAll("Ü", "U");
			// adresBilgisi = adresBilgisi.replaceAll("Ö", "O");

			LokasyonBilgileri lB = new LokasyonBilgileri(adresBilgisi,
					adresBilgisi, "", "");
			lokasyonBilgileriList.add(lB);
			System.out.println("---------" + adresBilgisi + ", " + "Turkiye"
					+ "*******" + iller.getIlAdi().toLowerCase(Locale.US));
		}
	}

	public void ilCodeListener(ActionEvent event) {
		iller = (Iller) comboBul("harita:IlID").getValue();
		ilceListesiDoldur();
	}

	public void ilceCodeListener(ActionEvent event) {
		ilce = (Ilce) comboBul("harita:ilcelerId").getValue();
		semtlerListesiDoldur();
	}

	public void ilceListesiDoldur() {
		if (iller != null && iller.getId() instanceof Long) {
			ilcelerList = entityManager.createNamedQuery(
					"ilcelerTumKayitlarIleGore").setParameter("p1",
					iller.getId()).getResultList();
		}
	}

	public void semtlerListesiDoldur() {
		if (ilce != null && ilce.getId() instanceof Long) {
			semtlerList = entityManager.createNamedQuery(
					"semtlerTumKayitlarIleGore").setParameter("p1",
					ilce.getId()).getResultList();
		}
	}

	public HtmlSelectOneMenu comboBul(String comboAdi) {
		return (HtmlSelectOneMenu) facesContext.getViewRoot().findComponent(
				comboAdi);

	}

	@Remove
	@Destroy
	public void destroy() {

	}

	public Iller getIller() {
		return iller;
	}

	public Ilce getIlce() {
		return ilce;
	}

	public Semtler getSemt() {
		return semt;
	}

	public void setIller(Iller iller) {
		this.iller = iller;
	}

	public void setIlce(Ilce ilce) {
		this.ilce = ilce;
	}

	public void setSemt(Semtler semt) {
		this.semt = semt;
	}

	public List<Ilce> getIlcelerList() {
		return ilcelerList;
	}

	public void setIlcelerList(List<Ilce> ilcelerList) {
		this.ilcelerList = ilcelerList;
	}

	public List<Semtler> getSemtlerList() {
		return semtlerList;
	}

	public void setSemtlerList(List<Semtler> semtlerList) {
		this.semtlerList = semtlerList;
	}

	public String getGmapkey() {
		if (gmapkey == null) {
			gmapkey = createKey();
		}
		return gmapkey;
	}

	private String createKey() {

		HashMap hosts = new HashMap();
		hosts
				.put(
						"localhost",
						"ABQIAAAAqSG36MBNYinA_-rzrTV8VRT2yXp_ZAY8_ufC3CFXhHIE1NvwkxS1LH8yhSc8fBcogKQihxbKojrp0Q");
		hosts
				.put(
						"localhost:8080",
						"ABQIAAAAqSG36MBNYinA_-rzrTV8VRTwM0brOpm-All5BF6PoaKBxRWWERTU1b3ck4ttWUFzTUlNmqVXz-krEA");
		hosts
				.put(
						"89.106.8.140",
						"ABQIAAAAqSG36MBNYinA_-rzrTV8VRRZ3-vuCZEo1lFllOkSnjZraagJqxQDzlgqCIWW0rlEqR9-lsZVjzMemA");
		hosts
				.put(
						"89.106.8.140:8080",
						"ABQIAAAAqSG36MBNYinA_-rzrTV8VRRMckSr3qdMSsl8l8ZFR9eoJOP2fhSdHtu3yZMfWxcWxIDSpqoLYw6MRw");
 
		ExternalContext ec = FacesContext.getCurrentInstance()
				.getExternalContext();
		String host = (String) ec.getRequestHeaderMap().get("host");
		String key = (String) hosts.get(host);
		if (key != null)
			return key;
		else
			return "get the key for your domain at http://www.google.com/apis/maps/signup.html";

	}

	public void setGmapkey(String gmapkey) {
		this.gmapkey = gmapkey;
	}

	public int getZoom() {
		return zoom;
	}

	public void setZoom(int zoom) {
		this.zoom = zoom;
	}

	public String getDefaultLokasyon() {
		return defaultLokasyon;
	}

	public void setDefaultLokasyon(String defaultLokasyon) {
		this.defaultLokasyon = defaultLokasyon;
	}
 	public int getDefaultZoom() {
		return defaultZoom;
	}
 	public void setDefaultZoom(int defaultZoom) {
		this.defaultZoom = defaultZoom;
	}
 	public List<LokasyonBilgileri> getLokasyonBilgileriList() {
		return lokasyonBilgileriList;
	}
 	public void setLokasyonBilgileriList(
			List<LokasyonBilgileri> lokasyonBilgileriList) {
		this.lokasyonBilgileriList = lokasyonBilgileriList;
	}
 	public String getUrlAdi() {
		return urlAdi;
	}
 	public void setUrlAdi(String urlAdi) {
		this.urlAdi = urlAdi;
	}

}
